home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-19
/
iritsm3s.zip
/
IRITPRSR.H
< prev
next >
Wrap
C/C++ Source or Header
|
1992-01-28
|
5KB
|
131 lines
/*****************************************************************************
* Generic parser for the "Irit" solid modeller. *
* *
* Written by: Gershon Elber Ver 0.2, Sep. 1991 *
*****************************************************************************/
#ifndef IRIT_PRSR_GH
#define IRIT_PRSR_GH
#include "cagd_lib.h"
#include "genmat.h"
typedef enum {
IP_POLYGON = 1,
IP_POLYLINE,
IP_POINTLIST
} IPPolyStructType;
typedef enum {
IP_OBJ_UNDEF,
IP_OBJ_POLY,
IP_OBJ_SURFACE,
IP_OBJ_CURVE
} IPObjStructType;
#define MAX_NUM_ATTRS 10
/*****************************************************************************
* Attributes - an attribute is a pair of strings consists of a key and the *
* data. Up to MAX_NUM_ATTRS are supported. *
*****************************************************************************/
typedef struct IPAttributeStruct {
int NumStrAttribs;
char *StrAttrName[MAX_NUM_ATTRS]; /* Generic string attrs. */
char *StrAttrData[MAX_NUM_ATTRS];
} IPAttributeStruct;
#define IP_IS_VRTX_INTERNAL(V) (V -> VTags & 0x01)
#define IP_SET_VRTX_INTERNAL(V) (V -> VTags |= 0x01)
#define IP_RST_VRTX_INTERNAL(V) (V -> VTags &= ~0x01)
#define IP_HAS_VRTX_NORMAL(V) (V -> VTags & 0x02)
#define IP_SET_VRTX_NORMAL(V) (V -> VTags |= 0x02)
#define IP_RST_VRTX_NORMAL(V) (V -> VTags &= ~0x02)
typedef struct IPVertexStruct {
struct IPVertexStruct *Pnext; /* To next in chain. */
VoidPtr VAux;
unsigned int VTags; /* Some attributes. */
int Color;
RealType Coord[3]; /* Holds X, Y, Z coordinates. */
RealType Normal[3]; /* Hold Vertex normal into the solid. */
} IPVertexStruct;
#define IP_HAS_POLY_PLANE(P) (P -> PTags & 0x01)
#define IP_SET_POLY_PLANE(P) (P -> PTags |= 0x01)
#define IP_RST_POLY_PLANE(P) (P -> PTags &= ~0x01)
#define IP_HAS_POLY_BBOX(P) (P -> PTags & 0x02)
#define IP_SET_POLY_BBOX(P) (P -> PTags |= 0x02)
#define IP_RST_POLY_BBOX(P) (P -> PTags &= ~0x02)
typedef struct IPPolygonStruct {
struct IPPolygonStruct *Pnext; /* To next in chain. */
VoidPtr PAux;
unsigned int PTags; /* Some attributes. */
IPPolyStructType Type;
RealType Plane[4]; /* Holds Plane as Ax + By + Cz + D. */
RealType Xmin, Xmax, Ymin, Ymax; /* Bounding box of the polygon. */
IPVertexStruct *PVertex; /* To vertices list. */
} IPPolygonStruct;
#define IP_HAS_OBJ_RGB(P) (P -> OTags & 0x01)
#define IP_SET_OBJ_RGB(P) (P -> OTags |= 0x01)
#define IP_RST_OBJ_RGB(P) (P -> OTags &= ~0x01)
#define IP_HAS_OBJ_COLOR(P) (P -> OTags & 0x02)
#define IP_SET_OBJ_COLOR(P) (P -> OTags |= 0x02)
#define IP_RST_OBJ_COLOR(P) (P -> OTags &= ~0x02)
typedef struct IPObjectStruct {
struct IPObjectStruct *Pnext;
struct IPObjectStruct *FFPolylines, *FFPolygons; /* Freeform approx.. */
struct IPAttributeStruct Attrs;
VoidPtr OAux;
char Name[OBJ_NAME_LEN];
unsigned char RGB[3];
unsigned int OTags; /* Some attributes. */
IPObjStructType Type;
int Color;
union {
IPPolygonStruct *PPolygon;
CagdCrvStruct *PCrvs;
CagdSrfStruct *PSrfs;
} U;
} IPObjectStruct;
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif
IPObjectStruct *IritPrsrGetObjects(FILE *f);
int IritPrsrParseError(char **ErrorMsg);
IPVertexStruct *IritPrsrNewVertexStruct(void);
IPPolygonStruct *IritPrsrNewPolygonStruct(void);
IPObjectStruct *IritPrsrNewObjectStruct(void);
void IritPrsrSetStrAttrib(IPObjectStruct *PObj, char *Name, char *Data);
char *IritPrsrGetStrAttrib(IPObjectStruct *PObj, char *Name);
/* If set to TRUE (default) polygons will have their vertex lists circular */
/* or last vertex point on first. If set to FALSE, regular list list. */
extern int IritPrsrPolyListCirc;
/* Will be set to VIEW_MAT and PERS_MAT respectively if found in parsed data.*/
extern MatrixType IritPrsrViewMat, IritPrsrPrspMat;
extern int IritPrsrWasViewMat, IritPrsrWasPrspMat;
/* External variables/functions that should be provided by the application: */
/* Gets two list of all curves and surfaces in the datafile and process them */
/* as needed. May return a processed version to be put on returned list from */
/* IritPrsrGetObjects (polygonal approximation of the free form data for */
/* example), or NULL otherwise. */
/* This function is responsible to free crvs/srfs if not needed any more. */
IPObjectStruct *IritPrsrProcessFreeForm(IPObjectStruct *CrvObjs,
IPObjectStruct *SrfObjs);
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
#endif /* IRIT_PRSR_GH */